Изображение не может быть отображено, потому что оно содержит ошибки - PullRequest
17 голосов
/ 02 августа 2010

Почему этот код не работает?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>

        <title></title>
    </head>
    <body>
        <?php
        header('Content-type: image/png');
        $myImage = imagecreate(200, 100);
        $myGray = imagecolorallocate($myImage, 204, 204, 204);
        $myBlack = imagecolorallocate($myImage, 0, 0, 0);
        imageline($myImage, 15, 35, 120, 60, $myBlack);

        imagepng($myImage);
        imagedestroy($myImage);
        ?>
    </body>
</html>

Я всегда получаю ошибку The image cannot be displayed because it contains errors..Я уже включил php_gd2.dll и memory_limit в php.ini также 128M.Если я удаляю header('Content-type: image/png');, я не получаю ошибку, но я также не вижу изображение.Все, что я вижу, это: -

‰PNG ��� IHDR���È���d���ùHíH���PLTEÌÌÌ���Ó33d���MIDATH‰c £ Àx�§” Nf*k²Ã)Ãø�§”•5}À)ÅS†ÚšpJUà”a§²¦œ2ÔŽw<špJ‚Q0 †;�� uTBúŸ����IEND®B ‚`

Ответы [ 10 ]

27 голосов
/ 02 августа 2010

Вы не должны ничего выводить перед header (). Просто начните свой документ с <?php, за которым следует код для отображения изображения. Пропустить HTML-теги. Даже не пишите одну пустую строку перед header ().

Если вы хотите отобразить изображение внутри вашего HTML-документа, вы должны сделать это в двух файлах. Во-первых, назовите его, например, image.php, содержащий только код php, включая заголовок. Второй файл, назовите его show.php или show.html, содержит HTML-код, который вам нравится, включая <img src="image.php" alt="Your generated image" />.

11 голосов
/ 02 августа 2010

Если вы закодируете выходные данные в base64, вы можете использовать изображение напрямую с схемой данных URI .

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>

        <title></title>
    </head>
    <body>
        <?php

        $myImage = imagecreate(200, 100);
        $myGray = imagecolorallocate($myImage, 204, 204, 204);
        $myBlack = imagecolorallocate($myImage, 0, 0, 0);
        imageline($myImage, 15, 35, 120, 60, $myBlack);
        ob_start();
        imagepng($myImage);
        printf('<img src="data:image/png;base64,%s"/>', 
                base64_encode(ob_get_clean()));

        imagedestroy($myImage);
        ?>
    </body>
</html>

Обратите внимание, что URI данных поддерживаются не всеми браузерами (угадайте, какой).

3 голосов
/ 09 июня 2013

Даже если вы думаете, что удалили весь текст из заголовка перед заголовком (), ваш PHP-файл может содержать Маркер порядка байтов

Это будет невидимо для вас в вашем редакторе, ноВаш браузер увидит это и подумает, что изображение повреждено.Вам нужно предпринять шаги, соответствующие вашему редактору, чтобы удалить любую спецификацию.

3 голосов
/ 16 февраля 2012

Если у вас возникла эта проблема, попробуйте удалить любой пробел между началом скрипта и тегом php

> <?php

Я провел несколько часов, прежде чем понял это. И теперь все работает хорошо. Это происходит потому, что любой символ в файле изменяет формат PNG. Это прекрасно сработало для меня.

3 голосов
/ 08 февраля 2012

При попытке вывести jpg изображения профиля Facebook из их Graph API с помощью PHP, Я заметил, что если файл PHP сохранен с кодировкой UTF-8 - эта ошибка была возвращена, но если файл был сохранен с кодировкой ANSI - тогда все заработало.

3 голосов
/ 02 августа 2010

Вы должны вывести только изображение.Вы выводите кучу тегов.В частности

    <title></title>
</head>
<body>

, а затем изображение в виде двоичного файла.Если вы хотите увидеть это, wget страницу со своего сервера и попробуйте открыть ее в редакторе.Ваш код должен начинаться с <?php.

Удаление заголовка избавляет клиента от уведомления о том, что это изображение, поэтому он попытается распечатать его как текст.

2 голосов
/ 02 августа 2010

Я выделил PHP-скрипт в его собственный файл (image.php), и он работал нормально: я получил серый прямоугольник с черной наклонной линией. Ваша проблема пытается встроить это в HTML-файл.

Вам нужен PHP в отдельном отдельном файле (как я это сделал, назовите его image.php или что-то более подробное для ваших нужд), а затем создайте файл HTML следующим образом:

<html>
  <head>
    <title>Document Title</title>
  </head>
  <body>
    <img src="image.php" alt="" />
  </body>
</html>

Тогда вы должны получить желаемый результат.

2 голосов
/ 02 августа 2010

Это все, что вам нужно.Вы не можете распечатать что-нибудь еще, потому что это должно выглядеть как его собственный файл.Вы можете вызвать этот image.php и передать ему переменную, чтобы определить, какое изображение выводить.

<?php
    header('Content-type: image/png');
    $myImage = imagecreate(200, 100);
    $myGray = imagecolorallocate($myImage, 204, 204, 204);
    $myBlack = imagecolorallocate($myImage, 0, 0, 0);
    imageline($myImage, 15, 35, 120, 60, $myBlack);

    imagepng($myImage);
    imagedestroy($myImage);
?>
0 голосов
/ 25 апреля 2017

Если вы используете Filezilla для загрузки своих веб-страниц, убедитесь, что вы выбрали тип передачи как 'Auto/Binary'.

Перевод -> Тип перевода -> Авто / Бинарный.

0 голосов
/ 18 июля 2012

У меня была та же проблема, и решением было изменить кодировку кода с UTF-8 на ansi или наоборот. Если сервер настроен на UTF-8 и ваш код находится в ansi, это не сработает, а если ваш код находится в ansi, а сервер настроен на UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...